package com.itheima.homework.day08;

import java.util.Scanner;

/*
    我国的居民身份证号码，由十七位数字本体码和一位数字校验码组成。
    请定义方法判断用户输入的身份证号码是否合法，并在主方法中调用方法测试结果。
    规则为：
        1. 号码为18位
        2. 不能以数字0开头
        3. 前17位只可以是数字
        4. 最后一位可以是数字或者大写字母X。
 */
public class Homework08 {

    public static void main(String[] args) {
        //键盘录入一个身份证
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个身份证号:");
        String idCard = sc.next();

        //调用方法,校验当前身份证是否合法
        boolean res = checkIdCard(idCard);
        if (res){
            System.out.println("当前身份证号码合法");
        }else {
            System.out.println("当前身份证号码不合法");
        }
    }

    /*
        功能: 判断用户输入的身份证号码是否合法
        条件: 应该把身份证号码给我   -- String idCard
        结果: 返回true/false  -- boolean
     */
    public static boolean checkIdCard(String idCard){
        //1. 号码为18位
        if(idCard.length() != 18){
            System.out.println("身份证号必须18位!");
            return false;
        }
        
        //2. 不能以数字0开头
        if (idCard.startsWith("0")){
            System.out.println("身份证号不能以0开头!");
            return false;
        }

        for (int i = 0; i < idCard.length(); i++) {
            //拿到当前位的字符
            char code = idCard.charAt(i);

            if (i != idCard.length() -1){
                //3.前17位只可以是数字
                if (code > '9' || code < '0'){
                    System.out.println("前17位必须是数字!");
                    return false;
                }
            }else {
                //4. 最后一位可以是数字或者大写字母X
                if ((code > '9' || code < '0') && code != 'X'){
                    System.out.println("最后一位只能是数字或者X");
                    return false;
                }
            }
        }

        //代码能执行到这儿, 说明上面的条件都不满足,都不满足就是正确的身份证号
        return true;
    }
}
